package dper.study.codes.concurrent.api;

/**
 * Created by leichen on 2017/3/17.
 */
public interface ConcurrentExampleAPI {
    int timeConsumptionMultiTask() ;

    /**
     *  CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类，可以把它看成是一个计数器，其内部维护着一个count计数，
     *  只不过对这个计数器的操作都是原子操作，同时只能有一个线程去操作这个计数器，CountDownLatch通过构造函数传入一个初始计数值，
     *  调用者可以通过调用CounDownLatch对象的cutDown()方法，来使计数减1；如果调用对象上的await()方法，那么调用者就会一直阻塞在这里，
     *  直到别人通过cutDown方法，将计数减到0，才可以继续执行。
     * @return
     */
    int displayCountDownLatchUsage() ;

    /**
     * CyclicBarrier（又叫障碍器）。它适用于这样一种情况：你希望创建一组任务，它们并发地执行工作，另外的一个任务在这一组任务并发执行结束前一直阻塞等待，
     * 直到该组任务全部执行结束，这个任务才得以执行。这非常像 CountDownLatch，只是 CountDownLatch 是只触发一次的事件，而 CyclicBarrier 可以多次重用。
     * @return
     */
    int displayCyclicBarrierUsage() ;

    /**
     *
     * @return
     */
    int displayThreadLocalUsage() ;

    int displaySimpleThreadFutureFutureTaskCallableRunnableUsage() ;

}
